#ifndef _math_common_hpp_
#define _math_common_hpp_

/** \file math_common.hpp
 *  \author Adrian Schweizer
 *  \date 22.7.2007
 */

#include <cstddef>

#include <boost/mpl/identity.hpp>
#include <boost/mpl/bool.hpp>
#include <boost/mpl/if.hpp>
#include <boost/mpl/eval_if.hpp>
#include <boost/mpl/and.hpp>
#include <boost/mpl/int.hpp>
#include <boost/mpl/size_t.hpp>

//keep msvc from barking
#if defined _MSC_VER && _MSC_VER >= 1300
    #if !defined _CRT_SECURE_NO_WARNINGS
        #define _CRT_SECURE_NO_WARNINGS
    #endif
    #if !defined _SCL_SECURE_NO_WARNINGS
        #define _SCL_SECURE_NO_WARNINGS
    #endif  
    #if !defined _CRT_NONSTDC_NO_WARNINGS
        #define _CRT_NONSTDC_NO_WARNINGS
    #endif
#endif 

namespace core {

    /** \namespace math
     *  \brief Contains generic math utility template classes and functions
     *
     *  - generic scalar and vector operations that work with (all compiler builtin types, std::vector, std::valarry, boost::array, c-style arrays, Point, Index)
     *  - mathematical type classification metafunctions, like math::is_vector<T>::type and math::is_scalar<T>::type to query type information at compile-time
     */
    namespace math {

        template<class T>
            struct invalid_type;

        #define PARTICLE_MATH_EPSILON   1e-4
    } // namespace math

} // namespace core

#include "detail/forward_decls.hpp"

#endif // _math_common_hpp_
